In current graphics processing systems, the number and processing speed of memory clients have increased enough to make memory access latency a barrier to achieving high performance. In some instances, various memory clients share a common memory, and each memory client issues requests for data stored in the common memory based on individual memory access requirements. Requests from these memory clients are typically serialized through a common interface. As a result, requests are sometimes queued up for servicing prior to a critical request, where “critical request” refers to a request that should be serviced promptly to prevent underflow of an output data stream or overflow of an input data stream, in which underflow or overflow can sometimes lead to screen corruption or other errors. In some instances, a non-critical request subsequently becomes critical but is queued up for servicing behind non-critical requests. However, a critical request issued behind non-critical requests may have to wait for all prior non-critical requests to be serviced first, thus leading to increased service time for the critical request and potential screen corruption.
FIG. 1 illustrates a computer system that retrieves data in response to individual requests for data that are sent by the display engine to the memory controller, where the individual requests are queued up until the individual requests can be processed. FIG. 1 includes a graphics controller 110, which includes a memory controller 112 and a display engine 114 with a display buffer 116, a DRAM 118, and a monitor 120. The display engine 114 determines when more data is needed and sends individual requests to the memory controller 112 requesting that the memory controller 112 retrieve the specific data from the DRAM 118. The individual requests include the address, width and size of each array of data being requested. The memory controller 112 then processes the queued individual requests in order and retrieves the requested data from the DRAM 118. The retrieved data is sent back to the display engine 114 where it is stored in the display buffer 116 until it is needed by the display engine 114. The display engine 114 then processes the retrieved data and displays that data on the monitor 120.
Since the individual requests from the display engine 114 only include specific information about the data being retrieved such as address, size and width of the data, the memory controller 112 must have additional information about the memory it is accessing in order to effectively access the requested data. Additionally, the display buffer 116 must be big enough to store all of the data being requested by the display engine 114. Since the memory controller 112 simply processes individual requests as they are queued up, the display buffer 116 must be sufficiently large to store sufficient data in the event that changes occur and the display engine 114 cannot process the retrieved data as fast as it receives the data. Conversely, there may be delays in retrieving data, and display engine 114 must buffer enough data in display buffer 116 that it does not run out of data while waiting for data to be retrieved.
For example, when the display engine 114 sends an individual request for retrieving specific data to the memory controller 112, the memory controller 112 queues the individual requests, processes the requests sequentially and retrieves the specific requested data sequentially. Once the memory controller 112 queues the request, the request will not be processed until its turn arrives regardless of the criticality of the request. The retrieved data is then sequentially transmitted back to the display engine 114, regardless of whether the display engine 114 is ready to process the data or not. The display engine 114 must have a sufficiently large display buffer 116 to store all of this requested data because the display engine 114 may not be ready to process the data as fast as it receives the data. There are many reasons why the display buffer 116 may not be able to process data as fast as it receives the data including changed conditions, which could require processing data in a different order than the data was received. In such a situation the earlier requested data would have to be stored until the later requested data can be processed. This has a disadvantage of requiring a larger display buffer 116 and more processing power to process this data in a different order than the data was received.
Therefore what is needed is a system and method for controlling the retrieval of data from memory that can accommodate changes in data requests without having to store large amounts of data in display buffers.